﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace V82.ОбщиеМодули
{
	public partial class УправлениеПользователями
	{
		// Функция возвращает структуру значений по умолчанию для передаваемого пользователя и массива настроек.
		//
		// Параметры:
		//  Пользователь - СправочникСсылка.Пользователи - текущий пользователь программы
		//  МассивНастроек - Массив - признаки, для которых возвращаются значения по умолчанию
		//
		// Возвращаемое значение:
		//  Структура - структура значений по умолчанию.
		//

		public object ПолучитьСтруктуруЗначенийПоУмолчанию(/*Пользователь, МассивНастроек*/)
		{
			//СтруктураЗначений = Новый Структура;
			if(true/*Пользователь = глЗначениеПеременной("глТекущийПользователь")*/)
			{
				//КэшНастроекПользователей = глЗначениеПеременной("ЗначенияНастроекПользователей");
				/*// На сервере cохраним значение в КЭШе
*/
				/*// В других случаях значение получено "по ссылке", сохранять не требуется
*/
				//глЗначениеПеременнойУстановить("ЗначенияНастроекПользователей", КэшНастроекПользователей);
			}
			return null;
		}
		// ПолучитьСтруктуруЗначенийПоУмолчанию()
		// Функция возвращает значение по умолчанию для передаваемого пользователя и настройки.
		//
		// Параметры:
		//  Пользователь - текущий пользователь программы
		//  Настройка    - признак, для которого возвращается значение по умолчанию
		//
		// Возвращаемое значение:
		//  Значение по умолчанию для настройки.
		//

		public object ПолучитьЗначениеПоУмолчанию(/*Пользователь, Настройка*/)
		{
			if(true/*Пользователь = глЗначениеПеременной("глТекущийПользователь")*/)
			{
				//НастройкаСсылка = ПланыВидовХарактеристик.НастройкиПользователей[Настройка];
				//КэшНастроекПользователей = глЗначениеПеременной("ЗначенияНастроекПользователей");
				//ЗначениеНастройки = КэшНастроекПользователей[НастройкаСсылка];
				if(true/*ЗначениеНастройки = Неопределено*/)
				{
					//ЗначениеНастройки = ПолучитьЗначениеПоУмолчаниюПользователя(Пользователь, Настройка);
					//КэшНастроекПользователей[НастройкаСсылка] = ЗначениеНастройки;
					/*// На сервере cохраним значение в КЭШе
*/
					/*// В других случаях значение получено "по ссылке", сохранять не требуется
*/
					//глЗначениеПеременнойУстановить("ЗначенияНастроекПользователей", КэшНастроекПользователей, Истина);
				}
			}
			return null;
		}
		// ПолучитьЗначениеПоУмолчанию()
		// Функция возвращает значение по умолчанию и значения реквизитов данного значения для передаваемого пользователя, настройки и списка реквизитов.
		//
		// Параметры:
		//  Пользователь - пользователь или шаблон настроек
		//  Настройка    - имя настройки или ссылка, для которой возвращается значение по умолчанию
		//	СписокПолей  - список значений, содержащий имена реквизитов значения настройки, которые необходимо получить
		//
		// Возвращаемое значение:
		//  Элемент выборки запроса либо структура (в случае пустой выборки).
		//

		public object ПолучитьЗначениеПоУмолчаниюПользователя(/*Пользователь, Настройка, СписокПолей = Неопределено*/)
		{
			if(true/*ТипЗнч(Настройка) = Тип("Строка")*/)
			{
				//НастройкаСсылка = ПланыВидовХарактеристик.НастройкиПользователей[Настройка];
			}
			/*//В управляемом режиме для обычных пользователей документы отражаются во всех учетах (вне зависимости от настроек пользователя)
*/
			if(true/*НастройкаСсылка = ПланыВидовХарактеристик.НастройкиПользователей.ОтражатьДокументыВУправленческомУчете
	  ИЛИ НастройкаСсылка = ПланыВидовХарактеристик.НастройкиПользователей.ОтражатьДокументыВБухгалтерскомУчете
	  ИЛИ НастройкаСсылка = ПланыВидовХарактеристик.НастройкиПользователей.ОтражатьДокументыВНалоговомУчете*/)
			{
				if(true/*ТекущийРежимЗапуска() = РежимЗапускаКлиентскогоПриложения.УправляемоеПриложение
	  	  И (НЕ РольДоступна("ОтражениеВРегламентированномУчете"))
		  И (НЕ РольДоступна("ПолныеПрава"))*/)
				{
				}
			}
			//НастройкаТипЗнч = НастройкаСсылка.ТипЗначения;
			//НастройкаТипЗнчСправочник = Справочники.ТипВсеСсылки().СодержитТип(НастройкаТипЗнч.Типы()[0]);
			if(true/*НастройкаТипЗнчСправочник*/)
			{
				//МетаданныеТипаНастройки = Метаданные.НайтиПоТипу(НастройкаТипЗнч.Типы()[0]);
			}
			//Запрос = Новый Запрос;
			//Запрос.УстановитьПараметр("Пользователь", Пользователь);
			//Запрос.УстановитьПараметр("Настройка"   , НастройкаСсылка);
			/*Запрос.Текст = "
	|ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	ЗначениеНастроекПользователя.Значение КАК Значение";*/
			if(true/*СписокПолей <> Неопределено И НастройкаТипЗнчСправочник*/)
			{
				//СправочникИмя = МетаданныеТипаНастройки.Имя;
			}
			/*Запрос.Текст = Запрос.Текст + "		
	|ИЗ
	|	Справочник.Пользователи КАК Пользователи
	|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПользователей КАК ЗначениеНастроекПользователя
	|		ПО (ЗначениеНастроекПользователя.Настройка = &Настройка)
	|			И (ЗначениеНастроекПользователя.Пользователь = &Пользователь)
	|
	|ГДЕ
	|	Пользователи.Ссылка = &Пользователь";*/
			//Выборка = Запрос.Выполнить().Выбрать();
			if(true/*СписокПолей = Неопределено*/)
			{
				//ПустоеЗначение = НастройкаТипЗнч.ПривестиЗначение();
			}
			if(true/*Выборка.Количество() = 0*/)
			{
				if(true/*Настройка = "ОткрыватьПриЗапускеСписокТекущихЗадачПользователя"*/)
				{
				}
			}
			return null;
		}
		// ПолучитьЗначениеПоУмолчаниюПользователя()

		public object ПользовательОпределен(/**/)
		{
			//ОписаниеОшибкиОпределенияПользователя = "";
			if(true/*Не ЗначениеЗаполнено(ПараметрыСеанса.ТекущийПользователь)*/)
			{
				/*ОписаниеОшибкиОпределенияПользователя = "Пользователь не был найден в справочнике пользователей.
			|Вход в программу возможен только при наличии пользователя в справочнике 
			|или при наличии роли ""Полные права""";*/
			}
			if(true/*НЕ ПустаяСтрока(ОписаниеОшибкиОпределенияПользователя)*/)
			{
				//Предупреждение(ОписаниеОшибкиОпределенияПользователя);
				//ВызватьИсключение ОписаниеОшибкиОпределенияПользователя;
			}
			return null;
		}
		///////////////////////////////////////////////////////////////////////////////
		// ПРОЦЕДУРЫ И ФУНКЦИИ РАБОТЫ С ПОЛЬЗОВАТЕЛЯМИ ИБ
		// Функция по имени ищет пользователя ИБ
		//
		// Параметры:
		//	ИмяПользователя - строка по которой ищется пользователь ИБ
		//
		//

		public object НайтиПользователяИБ(/*ИмяПользователя*/)
		{
			if(true/*ИмяПользователя = "НеАвторизован"*/)
			{
				//ПользовательИБ = Неопределено;
			}
			return null;
		}
		// Процедура заполняет роли пользователя ИБ
		//
		// Параметры:
		//			ПользовательИБ	- <ПользовательИнформационнойБазы>
		//			СоставРолей		- <Массив> или Неопределено, содержит названия ролей
		//								Если передано Неопределено, то пользователю будет назначена только роль Пользователь
		//

		public void ЗаполнитьРолиПользователяИБ(/*ПользовательИБ, СоставРолей*/)
		{
			//ПользовательИБ.Роли.Очистить();
			if(true/*СоставРолей <> Неопределено*/)
			{
			}
			if(true/*НЕ ПользовательИБ.Роли.Содержит(Метаданные.Роли.Пользователь)
		И НЕ ПользовательИБ.Роли.Содержит(Метаданные.Роли.ПолныеПрава)*/)
			{
				/*// Роль "Пользователь" назначается всем
*/
				//ПользовательИБ.Роли.Добавить(Метаданные.Роли.Пользователь);
			}
		}
		//
		// Процедура изменяет данные пользователя ИБ
		// Вызывается при записи профиля или при записи пользователя
		// У пользователя должно быть право для администрирования пользователей
		//
		// Параметры:
		//  ИмяПользователя	- Строка, Имя пользователя ИБ
		//	СтруктураДанных - Структура, может содержать
		//						- Имя - Строка
		//						- ПолноеИмя - Строка
		//						- ПользовательОС - Строка
		//						- Пароль - Строка
		//						- ЗапрещеноИзменятьПароль - Булево
		//						- АутентификацияСтандартная - Булево
		//						- ПоказыватьВСпискеВыбора - Булево
		//						- АутентификацияОС - Булево
		//  					- ОсновнойИнтерфейс - Строка
		//  					- Язык - Строка
		//  					- СоставРолей - Массив, список ролей (названия)
		//

		public void ИзменитьДанныеПользователяИБ(/*ИмяПользователя, СтруктураДанных, СоздатьЕслиОтсутствует = Ложь*/)
		{
			//ЕстьПравоАдминистрированияПользователей = УправлениеДопПравамиПользователей.ЕстьПравоАдминистрированияПользователей();
			if(true/*НЕ ЕстьПравоАдминистрированияПользователей*/)
			{
				//ВызватьИсключение "Недостаточно прав для изменения ролей пользователя!";
			}
			//ПользовательИБ = УправлениеПользователями.НайтиПользователяИБ(СокрЛП(ИмяПользователя));
			if(true/*ПользовательИБ = Неопределено*/)
			{
				if(true/*СоздатьЕслиОтсутствует*/)
				{
					//ПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя();
				}
			}
			if(true/*СтруктураДанных.Свойство("Имя")*/)
			{
				//ПользовательИБ.Имя = СтруктураДанных.Имя;
			}
			if(true/*СтруктураДанных.Свойство("ПолноеИмя")*/)
			{
				//ПользовательИБ.ПолноеИмя = СтруктураДанных.ПолноеИмя;
			}
			if(true/*СтруктураДанных.Свойство("ПользовательОС")*/)
			{
				//ПользовательИБ.ПользовательОС = СтруктураДанных.ПользовательОС;
			}
			if(true/*СтруктураДанных.Свойство("Пароль")*/)
			{
				//ПользовательИБ.Пароль = СтруктураДанных.Пароль;
			}
			if(true/*СтруктураДанных.Свойство("ЗапрещеноИзменятьПароль")*/)
			{
				//ПользовательИБ.ЗапрещеноИзменятьПароль = СтруктураДанных.ЗапрещеноИзменятьПароль;
			}
			if(true/*СтруктураДанных.Свойство("АутентификацияСтандартная")*/)
			{
				//ПользовательИБ.АутентификацияСтандартная = СтруктураДанных.АутентификацияСтандартная;
			}
			if(true/*СтруктураДанных.Свойство("ПоказыватьВСпискеВыбора")*/)
			{
				//ПользовательИБ.ПоказыватьВСпискеВыбора = СтруктураДанных.ПоказыватьВСпискеВыбора;
			}
			if(true/*СтруктураДанных.Свойство("АутентификацияОС")*/)
			{
				//ПользовательИБ.АутентификацияОС = СтруктураДанных.АутентификацияОС;
			}
			if(true/*СтруктураДанных.Свойство("РежимЗапуска")*/)
			{
				//ПользовательИБ.РежимЗапуска = СтруктураДанных.РежимЗапуска;
			}
			/*// Изменение состава ролей
*/
			if(true/*СтруктураДанных.Свойство("СоставРолей")*/)
			{
				//ЗаполнитьРолиПользователяИБ(ПользовательИБ, СтруктураДанных.СоставРолей);
			}
			if(true/*СтруктураДанных.Свойство("ОсновнойИнтерфейс")*/)
			{
				//ОсновнойИнтерфейс = Метаданные.Интерфейсы.Найти(СтруктураДанных.ОсновнойИнтерфейс);
				if(true/*ОсновнойИнтерфейс <> Неопределено*/)
				{
					//ПользовательИБ.ОсновнойИнтерфейс = ОсновнойИнтерфейс;
				}
			}
			if(true/*СтруктураДанных.Свойство("Язык")*/)
			{
				//Язык = Метаданные.Языки.Найти(СтруктураДанных.Язык);
				if(true/*Язык <> Неопределено*/)
				{
					//ПользовательИБ.Язык = Язык;
				}
			}
			//ПользовательИБ.Записать();
		}
		// ИзменитьДанныеПользователяИБ
		// Процедура открывает форму групповой обработки объектов
		//
		// Параметры:
		//		ЗначенияСвойств	- <Структура>, содержит имя свойства (реквизит пользователя) и его значение
		//
		//

		public void ОткрытьГрупповуюОбработкуПользователей(/*ЗначенияСвойств = Неопределено*/)
		{
			//ГрупповаяОбработкаОбъектов = Обработки.ГрупповаяОбработкаОбъектов.Создать();
			//ДоступныеТипы = Новый ОписаниеТипов("СправочникСсылка.Пользователи");
			//ГрупповаяОбработкаОбъектов.УстановитьДоступныеТипы(ДоступныеТипы);
			//ГрупповаяОбработкаОбъектов.ВыводитьСообщенияОбОбработанныхОбъектах = Истина;
			/*// Ограничим реквизиты, которые можно изменить
*/
			//ГрупповаяОбработкаОбъектов.ОграничитьДоступныеСвойства = Истина;
			//ГрупповаяОбработкаОбъектов.СписокДоступныхСвойств.Добавить("ПрофильПолномочийПользователя");
			//ГрупповаяОбработкаОбъектов.СписокДоступныхСвойств.Добавить("КоманднаяПанельПользователя");
			//ФормаОбработки = ГрупповаяОбработкаОбъектов.ПолучитьФорму();
			/*// Установим заголовок и спрячем страницу настройки
*/
			//ФормаОбработки.Заголовок = "Групповая обработка пользователей";
			//ФормаОбработки.ЭлементыФормы.ОсновнаяПанель.Страницы.Настройка.Видимость = Ложь;
			//ФормаОбработки.Открыть();
			if(true/*ЗначенияСвойств <> Неопределено*/)
			{
				//ГрупповаяОбработкаОбъектов.УстановитьЗначенияСвойств(ЗначенияСвойств);
			}
		}
		//
		// Процедура проверяет активность пользователей в ИБ
		// и выводит сообщение, если есть активные пользователи
		//

		public void ИнформироватьОбИзмененииНастроекАктивныхПользователей(/*ТаблицаПользователей, ТекстСообщенияОбИзменениях*/)
		{
			//МассивПользователей = Новый Массив;
			//МассивСоединений = ПолучитьСоединенияИнформационнойБазы();
			//НомерТекущегоСоединения = НомерСоединенияИнформационнойБазы();
			if(true/*МассивПользователей.Количество() > 0*/)
			{
				//Сообщить("Были изменены " + ТекстСообщенияОбИзменениях + " пользователей, которые в данный момент работают с ИБ");
				//СписокПользователей = "";
				//СписокПользователей = СписокПользователей + ")";
				//Сообщить(СписокПользователей);
				//Сообщить("Для них новые значения вступят в силу только после перезапуска их сеанса работы с программой");
			}
		}
		// ИнформироватьОбИзмененииНастроекАктивныхПользователей
		// Процедура выводит сообщение, если изменены настройки доп прав активных пользователей
		//

		public void ИнформироватьОбИзмененииНастроекДопПрав(/*НаборЗаписей*/)
		{
			//ПрофильПолномочий = глЗначениеПеременной("ПрофильПолномочийПользователя");
			//ТекущийПользователь = глЗначениеПеременной("глТекущийПользователь");
			//МассивПрофилей = Новый Массив;
			//МассивПользователей = Новый Массив;
			//ТипЗнчПрофильПолномочий = Тип("СправочникСсылка.ПрофилиПолномочийПользователей");
			//ТипЗнчГруппаПользователей = Тип("СправочникСсылка.ГруппыПользователей");
			if(true/*МассивПрофилей.Количество() > 0 ИЛИ МассивПользователей.Количество() > 0*/)
			{
				//Запрос = Новый Запрос;
				/*Запрос.Текст = "ВЫБРАТЬ
		               |	Пользователи.Код КАК Код
		               |ИЗ
		               |	Справочник.Пользователи КАК Пользователи
		               |ГДЕ
		               |	Пользователи.Ссылка <> &ТекущийПользователь
		               |	И (Пользователи.ПрофильПолномочийПользователя В (&МассивПрофилей)
		               |			ИЛИ Пользователи.Ссылка В (&МассивПользователей))
		               |
		               |УПОРЯДОЧИТЬ ПО
		               |	Код";*/
				//Запрос.УстановитьПараметр("ТекущийПользователь", ТекущийПользователь);
				//Запрос.УстановитьПараметр("МассивПрофилей", МассивПрофилей);
				//Запрос.УстановитьПараметр("МассивПользователей", МассивПользователей);
				//ТаблицаПользователей = Запрос.Выполнить().Выгрузить();
				//ТаблицаПользователей.Индексы.Добавить("Код");
				//ТекстСообщенияОбИзменениях = "значения дополнительных прав";
				//ИнформироватьОбИзмененииНастроекАктивныхПользователей(ТаблицаПользователей, ТекстСообщенияОбИзменениях);
			}
		}
		// ИнформироватьОбИзмененииНастроекДопПрав
		// Процедура выводит сообщение, если изменены настройки активных пользователей
		//

		public void ИнформироватьОбИзмененииНастроекПользователя(/*НаборЗаписей*/)
		{
			//ТекущийПользователь = глЗначениеПеременной("глТекущийПользователь");
			//МассивПользователей = Новый Массив;
			if(true/*МассивПользователей.Количество() > 0*/)
			{
				/*// Для пользователей настройки которых изменились проверим наличие подключения к ИБ
*/
				/*// Сформируем таблицу содержащую имена пользователей ИБ
*/
				//Запрос = Новый Запрос;
				/*Запрос.Текст = "ВЫБРАТЬ
		               |	Пользователи.Код КАК Код,
		               |	Пользователи.Ссылка
		               |ИЗ
		               |	Справочник.Пользователи КАК Пользователи
		               |ГДЕ
		               |	Пользователи.Ссылка В(&МассивПользователей)
		               |
		               |УПОРЯДОЧИТЬ ПО
		               |	Код";*/
				//Запрос.УстановитьПараметр("МассивПользователей", МассивПользователей);
				//ТаблицаПользователей = Новый ТаблицаЗначений;
				//ТаблицаПользователей.Колонки.Добавить("Код");
				//ТаблицаПользователей.Индексы.Добавить("Код");
				//Выборка = Запрос.Выполнить().Выбрать();
				while(true/*Выборка.Следующий()*/)
				{
					if(true/*Выборка.Ссылка = ТекущийПользователь*/)
					{
						/*// Текущего пользователя пропускаем
*/
					}
					//СтрокаПользователя = ТаблицаПользователей.Добавить();
					//СтрокаПользователя.Код = СокрЛП(Выборка.Код);
				}
				/*;		
		
		ТекстСообщенияОбИзменениях = "значения настроек";*/
				//ИнформироватьОбИзмененииНастроекАктивныхПользователей(ТаблицаПользователей, ТекстСообщенияОбИзменениях);
			}
		}
		// ИнформироватьОбИзмененииНастроекПользователя
		// Процедура записывает значение по умолчанию для передаваемого пользователя и настройки.
		//
		// Параметры:
		//  Пользователь - текущий пользователь программы
		//  Настройка    - признак, для которого записывается значение по умолчанию
		//  Значение     - значение по умолчанию
		//
		// Возвращаемое значение:
		//  Нет
		//

		public void УстановитьЗначениеПоУмолчанию(/*Пользователь, Настройка, Значение*/)
		{
			//СсылкаНастройки = ПланыВидовХарактеристик.НастройкиПользователей[Настройка];
			//МенеджерЗаписи = РегистрыСведений.НастройкиПользователей.СоздатьМенеджерЗаписи();
			//МенеджерЗаписи.Пользователь = Пользователь;
			//МенеджерЗаписи.Настройка = СсылкаНастройки;
			//МенеджерЗаписи.Значение = Значение;
			//МенеджерЗаписи.Записать();
		}
		// ПолучитьЗначениеПоУмолчанию()

		public object ПолучитьТаблицуСоответствияРолейГруппам(/**/)
		{
			//ТаблицаСоответствияРолейГруппам = Новый ТаблицаЗначений;
			//ТаблицаСоответствияРолейГруппам.Колонки.Добавить("ИмяРоли");
			//ТаблицаСоответствияРолейГруппам.Колонки.Добавить("ИмяГруппы");
			//ТаблицаСоответствияРолейГруппам.Колонки.Добавить("Несамостоятельная");
			//МакетОписаниеРолейКонфигурации = ПолучитьОбщийМакет("ОписаниеРолейКонфигурации");
			//ОбластьСписокРолей = МакетОписаниеРолейКонфигурации.ПолучитьОбласть("ОписаниеРолей");
			return null;
		}
		//
		// Функция возвращает список ролей конфигурации
		//

		public object ПолучитьСписокРолейКонфигурации(/*ПолучитьОписаниеРолей = Ложь*/)
		{
			//СписокРолейКонфигурации = Новый ТаблицаЗначений;
			//СписокРолейКонфигурации.Колонки.Добавить("ИмяРоли", Новый ОписаниеТипов("Строка"));
			//СписокРолейКонфигурации.Колонки.Добавить("ПредставлениеРоли", Новый ОписаниеТипов("Строка"));
			//СписокРолейКонфигурации.Колонки.Добавить("Порядок", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(3,0)));
			if(true/*ПолучитьОписаниеРолей*/)
			{
				//СписокРолейКонфигурации.Колонки.Добавить("ИмяГруппы", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(100)));
				//СписокРолейКонфигурации.Колонки.Добавить("Несамостоятельная", Новый ОписаниеТипов("Булево"));
				//ТаблицаСоответствияРолейГруппам = ПолучитьТаблицуСоответствияРолейГруппам();
			}
			//Сч = 0;
			return null;
		}
		// ПолучитьСписокРолейКонфигурации
		// Функция возвращает список групп пользователя
		//

		public object ПолучитьСписокГруппПользователя(/*Пользователь, ПолучитьПредставление = Ложь*/)
		{
			//СписокГруппПользователя = Новый СписокЗначений;
			//Запрос = Новый Запрос;
			if(true/*ПолучитьПредставление*/)
			{
				/*ТекстЗапроса = 
			"ВЫБРАТЬ
			|	ГруппыПользователей.Ссылка КАК ГруппаПользователей,
			|	ГруппыПользователей.Представление КАК ГруппаПользователейПредставление
			|ИЗ
			|	Справочник.ГруппыПользователей.ПользователиГруппы КАК ГруппыПользователейПользователиГруппы
			|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ГруппыПользователей КАК ГруппыПользователей
			|		ПО ГруппыПользователейПользователиГруппы.Ссылка = ГруппыПользователей.Ссылка
			|ГДЕ
			|	ГруппыПользователейПользователиГруппы.Пользователь = &Пользователь";*/
			}
			//Запрос.Текст = ТекстЗапроса;
			//Запрос.УстановитьПараметр("Пользователь", Пользователь);
			//Результат = Запрос.Выполнить();
			//Выборка = Результат.Выбрать();
			while(true/*Выборка.Следующий()*/)
			{
				if(true/*ПолучитьПредставление*/)
				{
					//СписокГруппПользователя.Добавить(Выборка.ГруппаПользователей, Выборка.ГруппаПользователейПредставление);
				}
			}
			return null;
		}
		// ПолучитьСписокГруппПользователя
	}
}
